﻿namespace SeedObject
{
    using IXmlSerializable = System.Xml.Serialization.IXmlSerializable;
    /// <summary>
    /// Interface to be implemented by any object Seed
    /// </summary>
    public interface ISeed : IXmlSerializable 
    {

        /// <summary>
        /// Article
        /// </summary>
        string Article { get; }
        /// <summary>
        /// for get the class without reflection
        /// </summary>
        string Kind { get; }
        /// <summary>
        /// object identifier
        /// </summary>
        string Id { get; set; }
        /// <summary>
        /// in specific state
        /// </summary>
        /// <param name="state">by which to consult</param>
        /// <returns>true or false according to the operation</returns>
        bool InA(State state);
        /// <summary>
        /// who is the parent of the object
        /// </summary>       
        ISeed Parent { get; set; }
        /// <summary>
        /// connection between two objects that represent the same
        /// </summary>
        ISeed Proxy { get; set; }
        /// <summary>
        /// Method for restoring an object after being used
        /// </summary>
        void Restore();
        /// <summary>
        /// State which are the object
        /// </summary>
        State State { get; set; }

    }
}
